package com.nifostasky.swing;

import org.springframework.stereotype.Component;

import javax.swing.*;
import java.awt.*;

/**
 * swing主容器(主窗口)
 * JFrame类已经实现了很多操作容器的基本方法,直接调用JFrame中的方法即可构建界面
 */
//@Component
public class CustomIndexSwingPage extends JFrame {

    /**
     * 构造方法初始化时,就开始加载容器相关内容
     */
    public CustomIndexSwingPage(){
        //设置容器标题
        this.setTitle("springboot整合swing搜索界面demo");
        //设置窗口尺寸(单位 px)
        this.setSize(1000,500);
        //设置窗口是否可关闭 此处可关闭
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口是否可见 此处可见
        this.setVisible(true);
        // 1. 绘制页面
//        this.addPage1();
        // 2 布局
        // 2.1 边框布局管理器
//        this.addBorderLayout();
        // 2.2 流式布局
//        this.addFlowLayout();
        // 2.3 卡片布局
        this.addCardLayout();
    }

    /**
     * 1. 绘制页面
     * 向主界面中添加子容器及组件
     */
    public void addPage1(){
        //创建一个面板
        JPanel jp = new JPanel();
        //创建一个标签
        JLabel jl=new JLabel("这是使用JFrame类创建的窗口");
        jp.add(jl);
        this.getContentPane().add(jp);
    }

    /**
     * 2.1 容器中组件的布局
     * 边框布局管理器
     */
    public void addBorderLayout(){
        //设置容器布局方式为 边框布局管理器
        this.setLayout(new BorderLayout());
        //定义5个按钮组件
        JButton button1=new JButton ("上");
        JButton button2=new JButton("左");
        JButton button3=new JButton("中");
        JButton button4=new JButton("右");
        JButton button5=new JButton("下");
        //向容器中添加组件
        this.getContentPane().add(button1,BorderLayout.NORTH);
        this.getContentPane().add(button2,BorderLayout.WEST);
        this.getContentPane().add(button3,BorderLayout.CENTER);
        this.getContentPane().add(button4,BorderLayout.EAST);
        this.getContentPane().add(button5,BorderLayout.SOUTH);
        this.getContentPane().setBounds(0,0,600,300);
    }

    /**
     * 2.2 流式布局管理器
     */
    public void addFlowLayout(){
        //创建按钮
        JButton btn1=new JButton("1");
        JButton btn2=new JButton("2");
        JButton btn3=new JButton("3");
        JButton btn4=new JButton("4");
        JButton btn5=new JButton("5");
        JButton btn6=new JButton("6");
        JButton btn7=new JButton("7");
        JButton btn8=new JButton("8");
        JButton btn9=new JButton("9");
        //面板中添加按钮
        this.add(btn1);
        this.add(btn2);
        this.add(btn3);
        this.add(btn4);
        this.add(btn5);
        this.add(btn6);
        this.add(btn7);
        this.add(btn8);
        this.add(btn9);
        //流式布局
        this.setLayout(new FlowLayout(FlowLayout.LEADING,20,20));
        //设置背景色
        this.setBackground(Color.gray);
    }

    /**
     * 2.3 卡片布局管理器
     */
    public void addCardLayout(){
        JPanel p1=new JPanel();    //面板1
        JPanel p2=new JPanel();    //面板2
        JPanel cards=new JPanel(new CardLayout());    //卡片式布局的面板
        p1.add(new JButton("登录按钮"));
        p1.add(new JButton("注册按钮"));
        p1.add(new JButton("找回密码按钮"));
        p2.add(new JTextField("用户名文本框",20));
        p2.add(new JTextField("密码文本框",20));
        p2.add(new JTextField("验证码文本框",20));
        cards.add(p1,"card1");    //向卡片式布局面板中添加面板1
        cards.add(p2,"card2");    //向卡片式布局面板中添加面板2
        CardLayout cl=(CardLayout)(cards.getLayout());
        cl.show(cards,"card2");    //调用show()方法显示面板2
        this.add(cards);
        this.setBounds(300,200,400,200);
    }

    /**
     *
     */
}
